// 正例
declare const properlyTyped: { prop: { a: string } };

export const v1 = properlyTyped.prop.a;

const key = 'a';
export const v2 = properlyTyped.prop[key];

const arr = ['1', '2', '3'];
let idx = 1;
export const v3 = arr[idx];
export const v4 = arr[idx++];

function foo(x: { a: number }, y: any) {
  x[y++];
}

function foo(x: { a: number }) {
  x.a;
}

function foo(x?: { a: number }) {
  x?.a;
}

function foo(x: { a: number }) {
  x['a'];
}

function foo(x?: { a: number }) {
  x?.['a'];
}

function foo(x: { a: number }, y: string) {
  x[y];
}

function foo(x?: { a: number }, y: string) {
  x?.[y];
}

function foo(x: string[]) {
  x[1];
}

class B implements FG.A {}

interface B extends FG.A {}